<!DOCTYPE html>
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>bundle_adjust_mosaic [HALCON算子参考手册]</title>
<style type="text/css">
      body {
    color: #000000;
    background-color: #ffffff;
    margin: 0;
    font-family: Arial, Helvetica, sans-serif;
}

.body_main {
    margin-left: 35px;
    margin-right: 35px;
}

@media screen and (min-width:992px) {

    .body_main {
        margin-left: 10%;
        margin-right: 10%;
    }

    table.toctable {
        width: 80%
    }
}

@media screen and (min-width:1400px) {

    .body_main {
        margin-left: 15%;
        margin-right: 15%;
    }

    table.toctable {
        width: 70%
    }
}

body>div ul ul {
    margin-left: inherit;
}

a:link {
    color: #0044cc;
}

a:link,
a:visited {
    text-decoration: none;
}

a:link:hover,
a:visited:hover {
    text-decoration: underline;
}

th {
    text-align: left;
}

h1,
h2,
h3,
h4,
h5,
h6 {
    text-rendering: optimizeLegibility;
    color: #666666;
}

code {
    font-family: monospace,monospace;
}

h1 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

h2 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

hr {
    border: 0;
    border-top: solid 1px #f28d26;
}

.pre {
    display: block;
    padding-bottom: 1ex;
    font-family: monospace;
    white-space: pre;
}

pre {
    font-family: monospace, monospace;
    padding: 1ex;
    white-space: pre-wrap;
}

.toc {
    font-size: 80%;
    border-top: 1px dashed #f28d26;
    border-bottom: 1px dashed #f28d26;
    padding-top: 5px;
    padding-bottom: 5px;
}

.inv {
    margin: 0;
    border: 0;
    padding: 0;
}

.banner {
    color: #666666;
    padding-left: 1em;
}

.logo {
    background-color: white;
}

.keyboard {
    font-size: 80%;
    padding-left: 3px;
    padding-right: 3px;
    border-radius: 5px;
    border-width: 1px;
    border-style: solid;
    border-color: #f28d26;
    background-color: #f3f3f3;
}

.warning {
    margin-top: 2ex;
    margin-bottom: 1ex;
    padding: 10px;
    text-align: center;
    border: 1px solid;
    color: #bb0000;
    background-color: #fff7f7
}

.imprint {
    margin-top: 1ex;
    font-size: 80%;
    color: #666666;
}

.imprinthead {
    font-weight: bolder;
    color: #666666;
}

.indexlink {
    text-align: right;
    padding-bottom: 5px;
}

.postscript {
    margin-top: 2ex;
    font-size: 80%;
    color: #666666
}

.evenrow {
    background-color: #e7e7ef;
    vertical-align: top;
}

.oddrow {
    background-color: #f7f7ff;
    vertical-align: top;
}

.headrow {
    background-color: #97979f;
    color: #ffffff;
    vertical-align: top;
}

.logorow {
    vertical-align: top;
}

.error {
    color: red;
}

.var {
    font-style: italic
}

.halconoperator {
    font-family: monospace, monospace;
}

span.operator {
    font-family: monospace, monospace;
}

span.procedure {
    font-family: monospace, monospace;
}

span.operation {
    font-family: monospace, monospace;
}

span.feature {
    font-family: Arial, Helvetica, Homerton, sans-serif;
}

ul {
    padding-left: 1.2em;
}

li.dot {
    list-style-type: square;
    color: #f28d26;
}

.breadcrumb {
    font-size: 80%;
    color: white;
    background-color: #062d64;
    margin-bottom: 20px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 15px;
}

.webbar {
    font-size: 80%;
    background-color: #dddddd;
    margin-top: 0px;
    margin-left: -35px;
    margin-right: -35px;
    margin-bottom: 0px;
    padding-top: 5px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 5px;
}

.footer {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    border-top: 1px dashed #f28d26;
    font-size: 80%;
    color: #666666;
    padding-bottom: 8px;
}

.footer .socialmedia a {
    padding-left: 7px;
}

.socialmedia {
    padding-top: 10px;
}

.copyright {
    margin-top: 19px;
}

.breadcrumb a {
    color: #ffffff;
    border-bottom: 1px solid white;
}

.breadcrumb a:link:hover,
.breadcrumb a:visited:hover {
    text-decoration: none;
    border-bottom: none;
}

.heading {
    margin-top: 1ex;
    font-size: 110%;
    font-weight: bold;
    color: #666666;
}

.text {
    color: black;
}

.example {
    font-size: 80%;
    background-color: #f3f3f3;
    border: 1px dashed #666666;
    padding: 10px;
}

.displaymath {
    display: block;
    text-align: center;
    margin-top: 1ex;
    margin-bottom: 1ex;
}

.title {
    float: left;
    padding-top: 3px;
    padding-bottom: 3px;
}

.signnote {
    font-family: Arial, Helvetica, Homerton, sans-serif;
    font-size: 80%;
    color: #666666;
    font-weight: lighter;
    font-style: italic
}

.par {
    margin-bottom: 1.5em;
}

.parhead {
    text-align: right;
}

.parname {
    float: left;
}

.pardesc {
    font-size: 85%;
    margin-top: 0.5em;
    margin-bottom: 0.5em;
    margin-left: 2em;
}

.parcat {
    color: #666;
    font-weight: bold;
}

*[data-if=cpp],
*[data-if=c],
*[data-if=dotnet],
*[data-if=com],
*[data-if=python] {
    display: none;
}

.tabbar {
    text-align: right;
    border-bottom: 1px solid #f28d26;
    margin-bottom: 0.5em;
}

ul.tabs {
    padding-top: 3px;
    padding-bottom: 3px;
    margin-top: 10px;
    margin-bottom: 0;
    font-size: 80%
}

ul.tabs li {
    padding-top: 3px;
    padding-bottom: 3px;
    display: inline;
    overflow: hidden;
    list-style-type: none;
    margin: 0;
    margin-left: 8px;
    border-top: 1px solid #666;
    border-left: 1px solid #666;
    border-right: 1px solid #666;
}

ul.tabs li.active {
    border-left: 1px solid #f28d26;
    border-right: 1px solid #f28d26;
    border-top: 1px solid #f28d26;
    border-bottom: 1px solid #fff;
}

ul.tabs li.inactive {
    background-color: #eee;
}

ul.tabs li a {
    padding-left: 5px;
    padding-right: 5px;
    color: #666;
}

ul.tabs li a:link:hover {
    text-decoration: none;
}

ul.tabs li.inactive a {
    color: #666;
}

ul.tabs li.active a {
    color: black;
}

dl.generic dd {
    margin-bottom: 1em;
}

.pari {
    color: olive;
}

.paro {
    color: maroon;
}

.comment {
    font-size: 80%;
    color: green;
    white-space: nowrap;
}

table.grid {
    border-collapse: collapse;
}

table.grid td {
    padding: 5px;
    border: 1px solid;
}

table.layout {
    border: 0px;
}

table.layout td {
    padding: 5px;
}

table.table {
    border-collapse: collapse;
}

table.table td {
    padding: 5px;
    border-left: 0px;
    border-right: 0px;
}

table.table tr:last-child {
    border-bottom: 1px solid;
}

table.table th {
    padding: 5px;
    border-top: 1px solid;
    border-bottom: 1px solid;
    border-left: 0px;
    border-right: 0px;
}

.details_summary {
    cursor: pointer;
}

table.toctable {
    width: 100%;
}

table.toctable col:first-child {
    width: 20%;
}

table.toctable col:nth-last-child(2) {
    width: 8%;
}

table.altcolored tr:nth-child(even) {
    background-color: #f3f3f3;
}

    </style>
<!--OP_REF_STYLE_END-->
<script>
    <!--
var active_lang='hdevelop';function switchVisibility(obj,active_lang,new_lang)
{var display_style='inline';
for(var i=0;i<obj.length;i++)
{if(obj.item(i).getAttribute('data-if')==new_lang)
{obj.item(i).style.display=display_style;}
if(obj.item(i).getAttribute('data-if')==active_lang)
{obj.item(i).style.display='none';}}
return;}
function toggleLanguage(new_lang,initial)
{if(active_lang!=new_lang)
{var lis=document.getElementsByTagName('li');for(var i=0;i<lis.length;i++)
{if(lis.item(i).id=='syn-'+new_lang)
{lis.item(i).className='active';}
else
{lis.item(i).className='inactive';}}
var divs=document.getElementsByTagName('div');var spans=document.getElementsByTagName('span');switchVisibility(divs,active_lang,new_lang);switchVisibility(spans,active_lang,new_lang);if(!initial)
{setCookie("halcon_reference_language",new_lang,null,null);}
active_lang=new_lang;}
return;}
function setCookie(name,value,domain,exp_offset,path,secure)
{localStorage.setItem(name,value);}
function getCookie(name)
{return localStorage.getItem(name);}
function initialize()
{var qs=location.href.split('?')[1];var qs_lang_raw=location.href.split('interface=')[1];var qs_lang;if(qs_lang_raw)
{qs_lang=qs_lang_raw.split('#')[0];}
var cookie_lang=getCookie("halcon_reference_language");var new_lang;if((qs_lang=="hdevelop")||(qs_lang=="dotnet")||(qs_lang=="python")||(qs_lang=="cpp")||(qs_lang=="c"))
{new_lang=qs_lang;setCookie("halcon_reference_language",new_lang,null,null);}
else if((cookie_lang=="hdevelop")||(cookie_lang=="dotnet")||(cookie_lang=="python")||(cookie_lang=="cpp")||(cookie_lang=="c"))
{new_lang=cookie_lang;}
else
{new_lang="hdevelop";}
toggleLanguage(new_lang,1);return;}
-->

  </script>
</head>
<body onload="initialize();">
<div class="breadcrumb">
<br class="inv"><a href="index.html">目录</a> / <a href="toc_tools.html">工具</a> / <a href="toc_tools_mosaicking.html">Mosaicking</a><br class="inv">
</div>
<div class="body_main">
<div class="tabbar"><ul class="tabs">
<li id="syn-hdevelop" class="active"><a href="javascript:void(0);" onclick="toggleLanguage('hdevelop')" onfocus="blur()">HDevelop</a></li>
<li id="syn-dotnet" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('dotnet')" onfocus="blur()">.NET</a></li>
<li id="syn-python" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('python')" onfocus="blur()">Python</a></li>
<li id="syn-cpp" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('cpp')" onfocus="blur()">C++</a></li>
<li id="syn-c" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('c')" onfocus="blur()">C</a></li>
</ul></div>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<!--OP_REF_HEADER_END-->
<h1 id="sec_name">
<span data-if="hdevelop" style="display:inline;">bundle_adjust_mosaic</span><span data-if="c" style="display:none;">T_bundle_adjust_mosaic</span><span data-if="cpp" style="display:none;">BundleAdjustMosaic</span><span data-if="dotnet" style="display:none;">BundleAdjustMosaic</span><span data-if="python" style="display:none;">bundle_adjust_mosaic</span> (算子名称)</h1>
<h2>名称</h2>
<p><code><span data-if="hdevelop" style="display:inline;">bundle_adjust_mosaic</span><span data-if="c" style="display:none;">T_bundle_adjust_mosaic</span><span data-if="cpp" style="display:none;">BundleAdjustMosaic</span><span data-if="dotnet" style="display:none;">BundleAdjustMosaic</span><span data-if="python" style="display:none;">bundle_adjust_mosaic</span></code> — Perform a bundle adjustment of an image mosaic.</p>
<h2 id="sec_synopsis">参数签名</h2>
<div data-if="hdevelop" style="display:inline;">
<p>
<code><b>bundle_adjust_mosaic</b>( :  : <a href="#NumImages"><i>NumImages</i></a>, <a href="#ReferenceImage"><i>ReferenceImage</i></a>, <a href="#MappingSource"><i>MappingSource</i></a>, <a href="#MappingDest"><i>MappingDest</i></a>, <a href="#HomMatrices2D"><i>HomMatrices2D</i></a>, <a href="#Rows1"><i>Rows1</i></a>, <a href="#Cols1"><i>Cols1</i></a>, <a href="#Rows2"><i>Rows2</i></a>, <a href="#Cols2"><i>Cols2</i></a>, <a href="#NumCorrespondences"><i>NumCorrespondences</i></a>, <a href="#Transformation"><i>Transformation</i></a> : <a href="#MosaicMatrices2D"><i>MosaicMatrices2D</i></a>, <a href="#Rows"><i>Rows</i></a>, <a href="#Cols"><i>Cols</i></a>, <a href="#Error"><i>Error</i></a>)</code></p>
</div>
<div data-if="c" style="display:none;">
<p>
<code>Herror <b>T_bundle_adjust_mosaic</b>(const Htuple <a href="#NumImages"><i>NumImages</i></a>, const Htuple <a href="#ReferenceImage"><i>ReferenceImage</i></a>, const Htuple <a href="#MappingSource"><i>MappingSource</i></a>, const Htuple <a href="#MappingDest"><i>MappingDest</i></a>, const Htuple <a href="#HomMatrices2D"><i>HomMatrices2D</i></a>, const Htuple <a href="#Rows1"><i>Rows1</i></a>, const Htuple <a href="#Cols1"><i>Cols1</i></a>, const Htuple <a href="#Rows2"><i>Rows2</i></a>, const Htuple <a href="#Cols2"><i>Cols2</i></a>, const Htuple <a href="#NumCorrespondences"><i>NumCorrespondences</i></a>, const Htuple <a href="#Transformation"><i>Transformation</i></a>, Htuple* <a href="#MosaicMatrices2D"><i>MosaicMatrices2D</i></a>, Htuple* <a href="#Rows"><i>Rows</i></a>, Htuple* <a href="#Cols"><i>Cols</i></a>, Htuple* <a href="#Error"><i>Error</i></a>)</code></p>
</div>
<div data-if="cpp" style="display:none;">
<p>
<code>void <b>BundleAdjustMosaic</b>(const HTuple&amp; <a href="#NumImages"><i>NumImages</i></a>, const HTuple&amp; <a href="#ReferenceImage"><i>ReferenceImage</i></a>, const HTuple&amp; <a href="#MappingSource"><i>MappingSource</i></a>, const HTuple&amp; <a href="#MappingDest"><i>MappingDest</i></a>, const HTuple&amp; <a href="#HomMatrices2D"><i>HomMatrices2D</i></a>, const HTuple&amp; <a href="#Rows1"><i>Rows1</i></a>, const HTuple&amp; <a href="#Cols1"><i>Cols1</i></a>, const HTuple&amp; <a href="#Rows2"><i>Rows2</i></a>, const HTuple&amp; <a href="#Cols2"><i>Cols2</i></a>, const HTuple&amp; <a href="#NumCorrespondences"><i>NumCorrespondences</i></a>, const HTuple&amp; <a href="#Transformation"><i>Transformation</i></a>, HTuple* <a href="#MosaicMatrices2D"><i>MosaicMatrices2D</i></a>, HTuple* <a href="#Rows"><i>Rows</i></a>, HTuple* <a href="#Cols"><i>Cols</i></a>, HTuple* <a href="#Error"><i>Error</i></a>)</code></p>
<p>
<code>static HHomMat2DArray <a href="HHomMat2D.html">HHomMat2D</a>::<b>BundleAdjustMosaic</b>(Hlong <a href="#NumImages"><i>NumImages</i></a>, Hlong <a href="#ReferenceImage"><i>ReferenceImage</i></a>, const HTuple&amp; <a href="#MappingSource"><i>MappingSource</i></a>, const HTuple&amp; <a href="#MappingDest"><i>MappingDest</i></a>, const HHomMat2DArray&amp; <a href="#HomMatrices2D"><i>HomMatrices2D</i></a>, const HTuple&amp; <a href="#Rows1"><i>Rows1</i></a>, const HTuple&amp; <a href="#Cols1"><i>Cols1</i></a>, const HTuple&amp; <a href="#Rows2"><i>Rows2</i></a>, const HTuple&amp; <a href="#Cols2"><i>Cols2</i></a>, const HTuple&amp; <a href="#NumCorrespondences"><i>NumCorrespondences</i></a>, const HString&amp; <a href="#Transformation"><i>Transformation</i></a>, HTuple* <a href="#Rows"><i>Rows</i></a>, HTuple* <a href="#Cols"><i>Cols</i></a>, HTuple* <a href="#Error"><i>Error</i></a>)</code></p>
<p>
<code>static HHomMat2DArray <a href="HHomMat2D.html">HHomMat2D</a>::<b>BundleAdjustMosaic</b>(Hlong <a href="#NumImages"><i>NumImages</i></a>, Hlong <a href="#ReferenceImage"><i>ReferenceImage</i></a>, const HTuple&amp; <a href="#MappingSource"><i>MappingSource</i></a>, const HTuple&amp; <a href="#MappingDest"><i>MappingDest</i></a>, const HHomMat2DArray&amp; <a href="#HomMatrices2D"><i>HomMatrices2D</i></a>, const HTuple&amp; <a href="#Rows1"><i>Rows1</i></a>, const HTuple&amp; <a href="#Cols1"><i>Cols1</i></a>, const HTuple&amp; <a href="#Rows2"><i>Rows2</i></a>, const HTuple&amp; <a href="#Cols2"><i>Cols2</i></a>, const HTuple&amp; <a href="#NumCorrespondences"><i>NumCorrespondences</i></a>, const HString&amp; <a href="#Transformation"><i>Transformation</i></a>, HTuple* <a href="#Rows"><i>Rows</i></a>, HTuple* <a href="#Cols"><i>Cols</i></a>, double* <a href="#Error"><i>Error</i></a>)</code></p>
<p>
<code>static HHomMat2DArray <a href="HHomMat2D.html">HHomMat2D</a>::<b>BundleAdjustMosaic</b>(Hlong <a href="#NumImages"><i>NumImages</i></a>, Hlong <a href="#ReferenceImage"><i>ReferenceImage</i></a>, const HTuple&amp; <a href="#MappingSource"><i>MappingSource</i></a>, const HTuple&amp; <a href="#MappingDest"><i>MappingDest</i></a>, const HHomMat2DArray&amp; <a href="#HomMatrices2D"><i>HomMatrices2D</i></a>, const HTuple&amp; <a href="#Rows1"><i>Rows1</i></a>, const HTuple&amp; <a href="#Cols1"><i>Cols1</i></a>, const HTuple&amp; <a href="#Rows2"><i>Rows2</i></a>, const HTuple&amp; <a href="#Cols2"><i>Cols2</i></a>, const HTuple&amp; <a href="#NumCorrespondences"><i>NumCorrespondences</i></a>, const char* <a href="#Transformation"><i>Transformation</i></a>, HTuple* <a href="#Rows"><i>Rows</i></a>, HTuple* <a href="#Cols"><i>Cols</i></a>, double* <a href="#Error"><i>Error</i></a>)</code></p>
<p>
<code>static HHomMat2DArray <a href="HHomMat2D.html">HHomMat2D</a>::<b>BundleAdjustMosaic</b>(Hlong <a href="#NumImages"><i>NumImages</i></a>, Hlong <a href="#ReferenceImage"><i>ReferenceImage</i></a>, const HTuple&amp; <a href="#MappingSource"><i>MappingSource</i></a>, const HTuple&amp; <a href="#MappingDest"><i>MappingDest</i></a>, const HHomMat2DArray&amp; <a href="#HomMatrices2D"><i>HomMatrices2D</i></a>, const HTuple&amp; <a href="#Rows1"><i>Rows1</i></a>, const HTuple&amp; <a href="#Cols1"><i>Cols1</i></a>, const HTuple&amp; <a href="#Rows2"><i>Rows2</i></a>, const HTuple&amp; <a href="#Cols2"><i>Cols2</i></a>, const HTuple&amp; <a href="#NumCorrespondences"><i>NumCorrespondences</i></a>, const wchar_t* <a href="#Transformation"><i>Transformation</i></a>, HTuple* <a href="#Rows"><i>Rows</i></a>, HTuple* <a href="#Cols"><i>Cols</i></a>, double* <a href="#Error"><i>Error</i></a>)  <span class="signnote">
            (
            Windows only)
          </span></code></p>
</div>
<div data-if="com" style="display:none;"></div>
<div data-if="dotnet" style="display:none;">
<p>
<code>static void <a href="HOperatorSet.html">HOperatorSet</a>.<b>BundleAdjustMosaic</b>(<a href="HTuple.html">HTuple</a> <a href="#NumImages"><i>numImages</i></a>, <a href="HTuple.html">HTuple</a> <a href="#ReferenceImage"><i>referenceImage</i></a>, <a href="HTuple.html">HTuple</a> <a href="#MappingSource"><i>mappingSource</i></a>, <a href="HTuple.html">HTuple</a> <a href="#MappingDest"><i>mappingDest</i></a>, <a href="HTuple.html">HTuple</a> <a href="#HomMatrices2D"><i>homMatrices2D</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Rows1"><i>rows1</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Cols1"><i>cols1</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Rows2"><i>rows2</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Cols2"><i>cols2</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NumCorrespondences"><i>numCorrespondences</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Transformation"><i>transformation</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#MosaicMatrices2D"><i>mosaicMatrices2D</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#Rows"><i>rows</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#Cols"><i>cols</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#Error"><i>error</i></a>)</code></p>
<p>
<code>static <a href="HHomMat2D.html">HHomMat2D[]</a> <a href="HHomMat2D.html">HHomMat2D</a>.<b>BundleAdjustMosaic</b>(int <a href="#NumImages"><i>numImages</i></a>, int <a href="#ReferenceImage"><i>referenceImage</i></a>, <a href="HTuple.html">HTuple</a> <a href="#MappingSource"><i>mappingSource</i></a>, <a href="HTuple.html">HTuple</a> <a href="#MappingDest"><i>mappingDest</i></a>, <a href="HHomMat2D.html">HHomMat2D[]</a> <a href="#HomMatrices2D"><i>homMatrices2D</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Rows1"><i>rows1</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Cols1"><i>cols1</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Rows2"><i>rows2</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Cols2"><i>cols2</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NumCorrespondences"><i>numCorrespondences</i></a>, string <a href="#Transformation"><i>transformation</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#Rows"><i>rows</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#Cols"><i>cols</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#Error"><i>error</i></a>)</code></p>
<p>
<code>static <a href="HHomMat2D.html">HHomMat2D[]</a> <a href="HHomMat2D.html">HHomMat2D</a>.<b>BundleAdjustMosaic</b>(int <a href="#NumImages"><i>numImages</i></a>, int <a href="#ReferenceImage"><i>referenceImage</i></a>, <a href="HTuple.html">HTuple</a> <a href="#MappingSource"><i>mappingSource</i></a>, <a href="HTuple.html">HTuple</a> <a href="#MappingDest"><i>mappingDest</i></a>, <a href="HHomMat2D.html">HHomMat2D[]</a> <a href="#HomMatrices2D"><i>homMatrices2D</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Rows1"><i>rows1</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Cols1"><i>cols1</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Rows2"><i>rows2</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Cols2"><i>cols2</i></a>, <a href="HTuple.html">HTuple</a> <a href="#NumCorrespondences"><i>numCorrespondences</i></a>, string <a href="#Transformation"><i>transformation</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#Rows"><i>rows</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#Cols"><i>cols</i></a>, out double <a href="#Error"><i>error</i></a>)</code></p>
</div>
<div data-if="python" style="display:none;">
<p>
<code>def <b>bundle_adjust_mosaic</b>(<a href="#NumImages"><i>num_images</i></a>: int, <a href="#ReferenceImage"><i>reference_image</i></a>: int, <a href="#MappingSource"><i>mapping_source</i></a>: Sequence[int], <a href="#MappingDest"><i>mapping_dest</i></a>: Sequence[int], <a href="#HomMatrices2D"><i>hom_matrices_2d</i></a>: Sequence[float], <a href="#Rows1"><i>rows_1</i></a>: Sequence[Union[float, int]], <a href="#Cols1"><i>cols_1</i></a>: Sequence[Union[float, int]], <a href="#Rows2"><i>rows_2</i></a>: Sequence[Union[float, int]], <a href="#Cols2"><i>cols_2</i></a>: Sequence[Union[float, int]], <a href="#NumCorrespondences"><i>num_correspondences</i></a>: Sequence[int], <a href="#Transformation"><i>transformation</i></a>: str) -&gt; Tuple[Sequence[float], Sequence[float], Sequence[float], Sequence[float]]</code></p>
<p>
<code>def <b>bundle_adjust_mosaic_s</b>(<a href="#NumImages"><i>num_images</i></a>: int, <a href="#ReferenceImage"><i>reference_image</i></a>: int, <a href="#MappingSource"><i>mapping_source</i></a>: Sequence[int], <a href="#MappingDest"><i>mapping_dest</i></a>: Sequence[int], <a href="#HomMatrices2D"><i>hom_matrices_2d</i></a>: Sequence[float], <a href="#Rows1"><i>rows_1</i></a>: Sequence[Union[float, int]], <a href="#Cols1"><i>cols_1</i></a>: Sequence[Union[float, int]], <a href="#Rows2"><i>rows_2</i></a>: Sequence[Union[float, int]], <a href="#Cols2"><i>cols_2</i></a>: Sequence[Union[float, int]], <a href="#NumCorrespondences"><i>num_correspondences</i></a>: Sequence[int], <a href="#Transformation"><i>transformation</i></a>: str) -&gt; Tuple[Sequence[float], Sequence[float], Sequence[float], float]</code></p>
</div>
<h2 id="sec_description">描述</h2>
<p><code><span data-if="hdevelop" style="display:inline">bundle_adjust_mosaic</span><span data-if="c" style="display:none">bundle_adjust_mosaic</span><span data-if="cpp" style="display:none">BundleAdjustMosaic</span><span data-if="com" style="display:none">BundleAdjustMosaic</span><span data-if="dotnet" style="display:none">BundleAdjustMosaic</span><span data-if="python" style="display:none">bundle_adjust_mosaic</span></code> performs a bundle adjustment of an
image mosaic.  This can be used to determine the geometry of a
mosaic as robustly as possible, and hence to determine the
transformations of the images in the mosaic more accurately than
with single image pairs.
</p>
<p>To achieve this, the projective transformation for each overlapping
image pair in the mosaic should be determined with
<a href="proj_match_points_ransac.html"><code><span data-if="hdevelop" style="display:inline">proj_match_points_ransac</span><span data-if="c" style="display:none">proj_match_points_ransac</span><span data-if="cpp" style="display:none">ProjMatchPointsRansac</span><span data-if="com" style="display:none">ProjMatchPointsRansac</span><span data-if="dotnet" style="display:none">ProjMatchPointsRansac</span><span data-if="python" style="display:none">proj_match_points_ransac</span></code></a>.  For example, for a
2×2 block of images in the following layout
</p>
<div style="text-align:center"><table style="margin-left:auto;margin-right:auto" class="grid">
<col span="1">
<col span="1">
<tr>
<td style="text-align:center">
1 </td>
<td style="text-align:center"> 2 </td>
</tr>
<tr>
<td style="text-align:center">
3 </td>
<td style="text-align:center"> 4
</td>
</tr>
</table></div>
<p>the following projective transformations should be determined,
assuming that all images overlap each other: 1-&gt;2,
1-&gt;3, 1-&gt;4, 2-&gt;3,
2-&gt;4 and 3-&gt;4.  The indices of the
images that determine the respective transformation are given by
<a href="#MappingSource"><i><code><span data-if="hdevelop" style="display:inline">MappingSource</span><span data-if="c" style="display:none">MappingSource</span><span data-if="cpp" style="display:none">MappingSource</span><span data-if="com" style="display:none">MappingSource</span><span data-if="dotnet" style="display:none">mappingSource</span><span data-if="python" style="display:none">mapping_source</span></code></i></a> and <a href="#MappingDest"><i><code><span data-if="hdevelop" style="display:inline">MappingDest</span><span data-if="c" style="display:none">MappingDest</span><span data-if="cpp" style="display:none">MappingDest</span><span data-if="com" style="display:none">MappingDest</span><span data-if="dotnet" style="display:none">mappingDest</span><span data-if="python" style="display:none">mapping_dest</span></code></i></a>.  The indices are
start at 1.  Consequently, in the above example
<a href="#MappingSource"><i><code><span data-if="hdevelop" style="display:inline">MappingSource</span><span data-if="c" style="display:none">MappingSource</span><span data-if="cpp" style="display:none">MappingSource</span><span data-if="com" style="display:none">MappingSource</span><span data-if="dotnet" style="display:none">mappingSource</span><span data-if="python" style="display:none">mapping_source</span></code></i></a> = <i>[1,1,1,2,2,3]</i> and
<a href="#MappingDest"><i><code><span data-if="hdevelop" style="display:inline">MappingDest</span><span data-if="c" style="display:none">MappingDest</span><span data-if="cpp" style="display:none">MappingDest</span><span data-if="com" style="display:none">MappingDest</span><span data-if="dotnet" style="display:none">mappingDest</span><span data-if="python" style="display:none">mapping_dest</span></code></i></a> = <i>[2,3,4,3,4,4]</i> must be used.  The
number of images in the mosaic is given by <a href="#NumImages"><i><code><span data-if="hdevelop" style="display:inline">NumImages</span><span data-if="c" style="display:none">NumImages</span><span data-if="cpp" style="display:none">NumImages</span><span data-if="com" style="display:none">NumImages</span><span data-if="dotnet" style="display:none">numImages</span><span data-if="python" style="display:none">num_images</span></code></i></a>.  It
is used to check whether each image can be reached by a chain of
transformations.  The index of the reference image is given by
<a href="#ReferenceImage"><i><code><span data-if="hdevelop" style="display:inline">ReferenceImage</span><span data-if="c" style="display:none">ReferenceImage</span><span data-if="cpp" style="display:none">ReferenceImage</span><span data-if="com" style="display:none">ReferenceImage</span><span data-if="dotnet" style="display:none">referenceImage</span><span data-if="python" style="display:none">reference_image</span></code></i></a>.  On output, this image has the identity
matrix as its transformation matrix.
</p>
<p>The 3×3 projective transformation matrices that
correspond to the image pairs are passed in <a href="#HomMatrices2D"><i><code><span data-if="hdevelop" style="display:inline">HomMatrices2D</span><span data-if="c" style="display:none">HomMatrices2D</span><span data-if="cpp" style="display:none">HomMatrices2D</span><span data-if="com" style="display:none">HomMatrices2D</span><span data-if="dotnet" style="display:none">homMatrices2D</span><span data-if="python" style="display:none">hom_matrices_2d</span></code></i></a>.
Additionally, the coordinates of the matched point pairs in the
image pairs must be passed in <a href="#Rows1"><i><code><span data-if="hdevelop" style="display:inline">Rows1</span><span data-if="c" style="display:none">Rows1</span><span data-if="cpp" style="display:none">Rows1</span><span data-if="com" style="display:none">Rows1</span><span data-if="dotnet" style="display:none">rows1</span><span data-if="python" style="display:none">rows_1</span></code></i></a>, <a href="#Cols1"><i><code><span data-if="hdevelop" style="display:inline">Cols1</span><span data-if="c" style="display:none">Cols1</span><span data-if="cpp" style="display:none">Cols1</span><span data-if="com" style="display:none">Cols1</span><span data-if="dotnet" style="display:none">cols1</span><span data-if="python" style="display:none">cols_1</span></code></i></a>,
<a href="#Rows2"><i><code><span data-if="hdevelop" style="display:inline">Rows2</span><span data-if="c" style="display:none">Rows2</span><span data-if="cpp" style="display:none">Rows2</span><span data-if="com" style="display:none">Rows2</span><span data-if="dotnet" style="display:none">rows2</span><span data-if="python" style="display:none">rows_2</span></code></i></a>, and <a href="#Cols2"><i><code><span data-if="hdevelop" style="display:inline">Cols2</span><span data-if="c" style="display:none">Cols2</span><span data-if="cpp" style="display:none">Cols2</span><span data-if="com" style="display:none">Cols2</span><span data-if="dotnet" style="display:none">cols2</span><span data-if="python" style="display:none">cols_2</span></code></i></a>.  They can be determined from the
output of <a href="proj_match_points_ransac.html"><code><span data-if="hdevelop" style="display:inline">proj_match_points_ransac</span><span data-if="c" style="display:none">proj_match_points_ransac</span><span data-if="cpp" style="display:none">ProjMatchPointsRansac</span><span data-if="com" style="display:none">ProjMatchPointsRansac</span><span data-if="dotnet" style="display:none">ProjMatchPointsRansac</span><span data-if="python" style="display:none">proj_match_points_ransac</span></code></a> with <a href="tuple_select.html"><code><span data-if="hdevelop" style="display:inline">tuple_select</span><span data-if="c" style="display:none">tuple_select</span><span data-if="cpp" style="display:none">TupleSelect</span><span data-if="com" style="display:none">TupleSelect</span><span data-if="dotnet" style="display:none">TupleSelect</span><span data-if="python" style="display:none">tuple_select</span></code></a>
or with the HDevelop function <code>subset</code>.  To enable
<code><span data-if="hdevelop" style="display:inline">bundle_adjust_mosaic</span><span data-if="c" style="display:none">bundle_adjust_mosaic</span><span data-if="cpp" style="display:none">BundleAdjustMosaic</span><span data-if="com" style="display:none">BundleAdjustMosaic</span><span data-if="dotnet" style="display:none">BundleAdjustMosaic</span><span data-if="python" style="display:none">bundle_adjust_mosaic</span></code> to determine which point pair belongs
to which image pair, <a href="#NumCorrespondences"><i><code><span data-if="hdevelop" style="display:inline">NumCorrespondences</span><span data-if="c" style="display:none">NumCorrespondences</span><span data-if="cpp" style="display:none">NumCorrespondences</span><span data-if="com" style="display:none">NumCorrespondences</span><span data-if="dotnet" style="display:none">numCorrespondences</span><span data-if="python" style="display:none">num_correspondences</span></code></i></a> must contain the
number of found point matches for each image pair.
</p>
<p>The parameter <a href="#Transformation"><i><code><span data-if="hdevelop" style="display:inline">Transformation</span><span data-if="c" style="display:none">Transformation</span><span data-if="cpp" style="display:none">Transformation</span><span data-if="com" style="display:none">Transformation</span><span data-if="dotnet" style="display:none">transformation</span><span data-if="python" style="display:none">transformation</span></code></i></a> determines the class of
transformations that is used in the bundle adjustment to transform
the image points.  This can be used to restrict the allowable
transformations.  For <a href="#Transformation"><i><code><span data-if="hdevelop" style="display:inline">Transformation</span><span data-if="c" style="display:none">Transformation</span><span data-if="cpp" style="display:none">Transformation</span><span data-if="com" style="display:none">Transformation</span><span data-if="dotnet" style="display:none">transformation</span><span data-if="python" style="display:none">transformation</span></code></i></a> =
<i><span data-if="hdevelop" style="display:inline">'projective'</span><span data-if="c" style="display:none">"projective"</span><span data-if="cpp" style="display:none">"projective"</span><span data-if="com" style="display:none">"projective"</span><span data-if="dotnet" style="display:none">"projective"</span><span data-if="python" style="display:none">"projective"</span></i>, projective transformations are used (see
<a href="vector_to_proj_hom_mat2d.html"><code><span data-if="hdevelop" style="display:inline">vector_to_proj_hom_mat2d</span><span data-if="c" style="display:none">vector_to_proj_hom_mat2d</span><span data-if="cpp" style="display:none">VectorToProjHomMat2d</span><span data-if="com" style="display:none">VectorToProjHomMat2d</span><span data-if="dotnet" style="display:none">VectorToProjHomMat2d</span><span data-if="python" style="display:none">vector_to_proj_hom_mat2d</span></code></a>).  For <a href="#Transformation"><i><code><span data-if="hdevelop" style="display:inline">Transformation</span><span data-if="c" style="display:none">Transformation</span><span data-if="cpp" style="display:none">Transformation</span><span data-if="com" style="display:none">Transformation</span><span data-if="dotnet" style="display:none">transformation</span><span data-if="python" style="display:none">transformation</span></code></i></a> =
<i><span data-if="hdevelop" style="display:inline">'affine'</span><span data-if="c" style="display:none">"affine"</span><span data-if="cpp" style="display:none">"affine"</span><span data-if="com" style="display:none">"affine"</span><span data-if="dotnet" style="display:none">"affine"</span><span data-if="python" style="display:none">"affine"</span></i>, affine transformations are used (see
<a href="vector_to_hom_mat2d.html"><code><span data-if="hdevelop" style="display:inline">vector_to_hom_mat2d</span><span data-if="c" style="display:none">vector_to_hom_mat2d</span><span data-if="cpp" style="display:none">VectorToHomMat2d</span><span data-if="com" style="display:none">VectorToHomMat2d</span><span data-if="dotnet" style="display:none">VectorToHomMat2d</span><span data-if="python" style="display:none">vector_to_hom_mat2d</span></code></a>), for <a href="#Transformation"><i><code><span data-if="hdevelop" style="display:inline">Transformation</span><span data-if="c" style="display:none">Transformation</span><span data-if="cpp" style="display:none">Transformation</span><span data-if="com" style="display:none">Transformation</span><span data-if="dotnet" style="display:none">transformation</span><span data-if="python" style="display:none">transformation</span></code></i></a> =
<i><span data-if="hdevelop" style="display:inline">'similarity'</span><span data-if="c" style="display:none">"similarity"</span><span data-if="cpp" style="display:none">"similarity"</span><span data-if="com" style="display:none">"similarity"</span><span data-if="dotnet" style="display:none">"similarity"</span><span data-if="python" style="display:none">"similarity"</span></i>, similarity transformations (see
<a href="vector_to_similarity.html"><code><span data-if="hdevelop" style="display:inline">vector_to_similarity</span><span data-if="c" style="display:none">vector_to_similarity</span><span data-if="cpp" style="display:none">VectorToSimilarity</span><span data-if="com" style="display:none">VectorToSimilarity</span><span data-if="dotnet" style="display:none">VectorToSimilarity</span><span data-if="python" style="display:none">vector_to_similarity</span></code></a>), and for <a href="#Transformation"><i><code><span data-if="hdevelop" style="display:inline">Transformation</span><span data-if="c" style="display:none">Transformation</span><span data-if="cpp" style="display:none">Transformation</span><span data-if="com" style="display:none">Transformation</span><span data-if="dotnet" style="display:none">transformation</span><span data-if="python" style="display:none">transformation</span></code></i></a> =
<i><span data-if="hdevelop" style="display:inline">'rigid'</span><span data-if="c" style="display:none">"rigid"</span><span data-if="cpp" style="display:none">"rigid"</span><span data-if="com" style="display:none">"rigid"</span><span data-if="dotnet" style="display:none">"rigid"</span><span data-if="python" style="display:none">"rigid"</span></i> rigid transformations (see
<a href="vector_to_rigid.html"><code><span data-if="hdevelop" style="display:inline">vector_to_rigid</span><span data-if="c" style="display:none">vector_to_rigid</span><span data-if="cpp" style="display:none">VectorToRigid</span><span data-if="com" style="display:none">VectorToRigid</span><span data-if="dotnet" style="display:none">VectorToRigid</span><span data-if="python" style="display:none">vector_to_rigid</span></code></a>).
</p>
<p>The resulting bundle-adjusted transformations are returned as an
array of 3×3 projective transformation matrices in
<a href="#MosaicMatrices2D"><i><code><span data-if="hdevelop" style="display:inline">MosaicMatrices2D</span><span data-if="c" style="display:none">MosaicMatrices2D</span><span data-if="cpp" style="display:none">MosaicMatrices2D</span><span data-if="com" style="display:none">MosaicMatrices2D</span><span data-if="dotnet" style="display:none">mosaicMatrices2D</span><span data-if="python" style="display:none">mosaic_matrices_2d</span></code></i></a>.  In addition, the points reconstructed by
the bundle adjustment are returned in (<a href="#Rows"><i><code><span data-if="hdevelop" style="display:inline">Rows</span><span data-if="c" style="display:none">Rows</span><span data-if="cpp" style="display:none">Rows</span><span data-if="com" style="display:none">Rows</span><span data-if="dotnet" style="display:none">rows</span><span data-if="python" style="display:none">rows</span></code></i></a>,
<a href="#Cols"><i><code><span data-if="hdevelop" style="display:inline">Cols</span><span data-if="c" style="display:none">Cols</span><span data-if="cpp" style="display:none">Cols</span><span data-if="com" style="display:none">Cols</span><span data-if="dotnet" style="display:none">cols</span><span data-if="python" style="display:none">cols</span></code></i></a>).  The average projection error of the reconstructed
points is returned in <a href="#Error"><i><code><span data-if="hdevelop" style="display:inline">Error</span><span data-if="c" style="display:none">Error</span><span data-if="cpp" style="display:none">Error</span><span data-if="com" style="display:none">Error</span><span data-if="dotnet" style="display:none">error</span><span data-if="python" style="display:none">error</span></code></i></a>.  This can be used to check
whether the optimization has converged to useful values.</p>
<h2 id="sec_execution">运行信息</h2>
<ul>
  <li>多线程类型:可重入(与非独占操作符并行运行)。</li>
<li>多线程作用域:全局(可以从任何线程调用)。</li>
  <li>未经并行化处理。</li>
</ul>
<h2 id="sec_parameters">参数表</h2>
  <div class="par">
<div class="parhead">
<span id="NumImages" class="parname"><b><code><span data-if="hdevelop" style="display:inline">NumImages</span><span data-if="c" style="display:none">NumImages</span><span data-if="cpp" style="display:none">NumImages</span><span data-if="com" style="display:none">NumImages</span><span data-if="dotnet" style="display:none">numImages</span><span data-if="python" style="display:none">num_images</span></code></b> (input_control)  </span><span>integer <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">int</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (integer)</span><span data-if="dotnet" style="display:none"> (<i>int</i> / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>Hlong</i>)</span><span data-if="c" style="display:none"> (<i>Hlong</i>)</span></span>
</div>
<p class="pardesc">Number of different images that are used for
the calibration.</p>
<p class="pardesc"><span class="parcat">Restriction:
      </span><code>NumImages &gt;= 2</code></p>
</div>
  <div class="par">
<div class="parhead">
<span id="ReferenceImage" class="parname"><b><code><span data-if="hdevelop" style="display:inline">ReferenceImage</span><span data-if="c" style="display:none">ReferenceImage</span><span data-if="cpp" style="display:none">ReferenceImage</span><span data-if="com" style="display:none">ReferenceImage</span><span data-if="dotnet" style="display:none">referenceImage</span><span data-if="python" style="display:none">reference_image</span></code></b> (input_control)  </span><span>integer <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">int</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (integer)</span><span data-if="dotnet" style="display:none"> (<i>int</i> / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>Hlong</i>)</span><span data-if="c" style="display:none"> (<i>Hlong</i>)</span></span>
</div>
<p class="pardesc">Index of the reference image.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="MappingSource" class="parname"><b><code><span data-if="hdevelop" style="display:inline">MappingSource</span><span data-if="c" style="display:none">MappingSource</span><span data-if="cpp" style="display:none">MappingSource</span><span data-if="com" style="display:none">MappingSource</span><span data-if="dotnet" style="display:none">mappingSource</span><span data-if="python" style="display:none">mapping_source</span></code></b> (input_control)  </span><span>integer-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[int]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (integer)</span><span data-if="dotnet" style="display:none"> (<i>int</i> / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>Hlong</i>)</span><span data-if="c" style="display:none"> (<i>Hlong</i>)</span></span>
</div>
<p class="pardesc">Indices of the source images of the transformations.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="MappingDest" class="parname"><b><code><span data-if="hdevelop" style="display:inline">MappingDest</span><span data-if="c" style="display:none">MappingDest</span><span data-if="cpp" style="display:none">MappingDest</span><span data-if="com" style="display:none">MappingDest</span><span data-if="dotnet" style="display:none">mappingDest</span><span data-if="python" style="display:none">mapping_dest</span></code></b> (input_control)  </span><span>integer-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[int]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (integer)</span><span data-if="dotnet" style="display:none"> (<i>int</i> / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>Hlong</i>)</span><span data-if="c" style="display:none"> (<i>Hlong</i>)</span></span>
</div>
<p class="pardesc">Indices of the target images of the transformations.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="HomMatrices2D" class="parname"><b><code><span data-if="hdevelop" style="display:inline">HomMatrices2D</span><span data-if="c" style="display:none">HomMatrices2D</span><span data-if="cpp" style="display:none">HomMatrices2D</span><span data-if="com" style="display:none">HomMatrices2D</span><span data-if="dotnet" style="display:none">homMatrices2D</span><span data-if="python" style="display:none">hom_matrices_2d</span></code></b> (input_control)  </span><span>hom_mat2d-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HHomMat2D.html">HHomMat2D</a>, </span><span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[float]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real)</span><span data-if="dotnet" style="display:none"> (<i>double</i>)</span><span data-if="cpp" style="display:none"> (<i>double</i>)</span><span data-if="c" style="display:none"> (<i>double</i>)</span></span>
</div>
<p class="pardesc">Array of 3×3 projective
transformation matrices.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Rows1" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Rows1</span><span data-if="c" style="display:none">Rows1</span><span data-if="cpp" style="display:none">Rows1</span><span data-if="com" style="display:none">Rows1</span><span data-if="dotnet" style="display:none">rows1</span><span data-if="python" style="display:none">rows_1</span></code></b> (input_control)  </span><span>point.x-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Row coordinates of corresponding points in the
respective source images.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Cols1" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Cols1</span><span data-if="c" style="display:none">Cols1</span><span data-if="cpp" style="display:none">Cols1</span><span data-if="com" style="display:none">Cols1</span><span data-if="dotnet" style="display:none">cols1</span><span data-if="python" style="display:none">cols_1</span></code></b> (input_control)  </span><span>point.y-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Column coordinates of corresponding points in
the respective source images.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Rows2" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Rows2</span><span data-if="c" style="display:none">Rows2</span><span data-if="cpp" style="display:none">Rows2</span><span data-if="com" style="display:none">Rows2</span><span data-if="dotnet" style="display:none">rows2</span><span data-if="python" style="display:none">rows_2</span></code></b> (input_control)  </span><span>point.x-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Row coordinates of corresponding points in the
respective destination images.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Cols2" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Cols2</span><span data-if="c" style="display:none">Cols2</span><span data-if="cpp" style="display:none">Cols2</span><span data-if="com" style="display:none">Cols2</span><span data-if="dotnet" style="display:none">cols2</span><span data-if="python" style="display:none">cols_2</span></code></b> (input_control)  </span><span>point.y-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Column coordinates of corresponding points in
the respective destination images.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="NumCorrespondences" class="parname"><b><code><span data-if="hdevelop" style="display:inline">NumCorrespondences</span><span data-if="c" style="display:none">NumCorrespondences</span><span data-if="cpp" style="display:none">NumCorrespondences</span><span data-if="com" style="display:none">NumCorrespondences</span><span data-if="dotnet" style="display:none">numCorrespondences</span><span data-if="python" style="display:none">num_correspondences</span></code></b> (input_control)  </span><span>integer-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[int]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (integer)</span><span data-if="dotnet" style="display:none"> (<i>int</i> / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>Hlong</i>)</span><span data-if="c" style="display:none"> (<i>Hlong</i>)</span></span>
</div>
<p class="pardesc">Number of point correspondences in the
respective image pair.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Transformation" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Transformation</span><span data-if="c" style="display:none">Transformation</span><span data-if="cpp" style="display:none">Transformation</span><span data-if="com" style="display:none">Transformation</span><span data-if="dotnet" style="display:none">transformation</span><span data-if="python" style="display:none">transformation</span></code></b> (input_control)  </span><span>string <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">str</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (string)</span><span data-if="dotnet" style="display:none"> (<i>string</i>)</span><span data-if="cpp" style="display:none"> (<i>HString</i>)</span><span data-if="c" style="display:none"> (<i>char*</i>)</span></span>
</div>
<p class="pardesc">Transformation class to be used.</p>
<p class="pardesc"><span class="parcat">Default:
      </span>
    <span data-if="hdevelop" style="display:inline">'projective'</span>
    <span data-if="c" style="display:none">"projective"</span>
    <span data-if="cpp" style="display:none">"projective"</span>
    <span data-if="com" style="display:none">"projective"</span>
    <span data-if="dotnet" style="display:none">"projective"</span>
    <span data-if="python" style="display:none">"projective"</span>
</p>
<p class="pardesc"><span class="parcat">List of values:
      </span><span data-if="hdevelop" style="display:inline">'affine'</span><span data-if="c" style="display:none">"affine"</span><span data-if="cpp" style="display:none">"affine"</span><span data-if="com" style="display:none">"affine"</span><span data-if="dotnet" style="display:none">"affine"</span><span data-if="python" style="display:none">"affine"</span>, <span data-if="hdevelop" style="display:inline">'projective'</span><span data-if="c" style="display:none">"projective"</span><span data-if="cpp" style="display:none">"projective"</span><span data-if="com" style="display:none">"projective"</span><span data-if="dotnet" style="display:none">"projective"</span><span data-if="python" style="display:none">"projective"</span>, <span data-if="hdevelop" style="display:inline">'rigid'</span><span data-if="c" style="display:none">"rigid"</span><span data-if="cpp" style="display:none">"rigid"</span><span data-if="com" style="display:none">"rigid"</span><span data-if="dotnet" style="display:none">"rigid"</span><span data-if="python" style="display:none">"rigid"</span>, <span data-if="hdevelop" style="display:inline">'similarity'</span><span data-if="c" style="display:none">"similarity"</span><span data-if="cpp" style="display:none">"similarity"</span><span data-if="com" style="display:none">"similarity"</span><span data-if="dotnet" style="display:none">"similarity"</span><span data-if="python" style="display:none">"similarity"</span></p>
</div>
  <div class="par">
<div class="parhead">
<span id="MosaicMatrices2D" class="parname"><b><code><span data-if="hdevelop" style="display:inline">MosaicMatrices2D</span><span data-if="c" style="display:none">MosaicMatrices2D</span><span data-if="cpp" style="display:none">MosaicMatrices2D</span><span data-if="com" style="display:none">MosaicMatrices2D</span><span data-if="dotnet" style="display:none">mosaicMatrices2D</span><span data-if="python" style="display:none">mosaic_matrices_2d</span></code></b> (output_control)  </span><span>hom_mat2d-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HHomMat2D.html">HHomMat2D</a>, </span><span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[float]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real)</span><span data-if="dotnet" style="display:none"> (<i>double</i>)</span><span data-if="cpp" style="display:none"> (<i>double</i>)</span><span data-if="c" style="display:none"> (<i>double</i>)</span></span>
</div>
<p class="pardesc">Array of 3×3 projective
transformation matrices that determine the
position of the images in the mosaic.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Rows" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Rows</span><span data-if="c" style="display:none">Rows</span><span data-if="cpp" style="display:none">Rows</span><span data-if="com" style="display:none">Rows</span><span data-if="dotnet" style="display:none">rows</span><span data-if="python" style="display:none">rows</span></code></b> (output_control)  </span><span>point.x-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[float]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real)</span><span data-if="dotnet" style="display:none"> (<i>double</i>)</span><span data-if="cpp" style="display:none"> (<i>double</i>)</span><span data-if="c" style="display:none"> (<i>double</i>)</span></span>
</div>
<p class="pardesc">Row coordinates of the points reconstructed by the
bundle adjustment.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Cols" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Cols</span><span data-if="c" style="display:none">Cols</span><span data-if="cpp" style="display:none">Cols</span><span data-if="com" style="display:none">Cols</span><span data-if="dotnet" style="display:none">cols</span><span data-if="python" style="display:none">cols</span></code></b> (output_control)  </span><span>point.y-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[float]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real)</span><span data-if="dotnet" style="display:none"> (<i>double</i>)</span><span data-if="cpp" style="display:none"> (<i>double</i>)</span><span data-if="c" style="display:none"> (<i>double</i>)</span></span>
</div>
<p class="pardesc">Column coordinates of the points reconstructed by the
bundle adjustment.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Error" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Error</span><span data-if="c" style="display:none">Error</span><span data-if="cpp" style="display:none">Error</span><span data-if="com" style="display:none">Error</span><span data-if="dotnet" style="display:none">error</span><span data-if="python" style="display:none">error</span></code></b> (output_control)  </span><span>real(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[float]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real)</span><span data-if="dotnet" style="display:none"> (<i>double</i>)</span><span data-if="cpp" style="display:none"> (<i>double</i>)</span><span data-if="c" style="display:none"> (<i>double</i>)</span></span>
</div>
<p class="pardesc">Average error per reconstructed point.</p>
</div>
<h2 id="sec_example_all">例程 (HDevelop)</h2>
<pre class="example">
* Assume that Images contains the four images of the mosaic in the
* layout given in the above description.  Then the following example
* computes the bundle-adjusted transformation matrices.
From := [1,1,1,2,2,3]
To := [2,3,4,3,4,4]
HomMatrices2D := []
Rows1 := []
Cols1 := []
Rows2 := []
Cols2 := []
NumMatches := []
for J := 0 to |From|-1 by 1
    select_obj (Images, ImageF, From[J])
    select_obj (Images, ImageT, To[J])
    points_foerstner (ImageF, 1, 2, 3, 100, 0.1, 'gauss', 'true', \
                      RowsF, ColsF, _, _, _, _, _, _, _, _)
    points_foerstner (ImageT, 1, 2, 3, 100, 0.1, 'gauss', 'true', \
                      RowsT, ColsT, _, _, _, _, _, _, _, _)
    proj_match_points_ransac (ImageF, ImageT, RowsF, ColsF, RowsT, ColsT, \
                              'ncc', 10, 0, 0, 480, 640, 0, 0.5, \
                              'gold_standard', 2, 42, HomMat2D, \
                              Points1, Points2)
    HomMatrices2D := [HomMatrices2D,HomMat2D]
    Rows1 := [Rows1,subset(RowsF,Points1)]
    Cols1 := [Cols1,subset(ColsF,Points1)]
    Rows2 := [Rows2,subset(RowsT,Points2)]
    Cols2 := [Cols2,subset(ColsT,Points2)]
    NumMatches := [NumMatches,|Points1|]
endfor
bundle_adjust_mosaic (4, 1, From, To, HomMatrices2D, Rows1, Cols1, \
                      Rows2, Cols2, NumMatches, 'rigid', MosaicMatrices, \
                      Rows, Columns, Error)
gen_bundle_adjusted_mosaic (Images, MosaicImage, HomMatrices2D, \
                            'default', 'false', TransMat2D)
</pre>
<h2 id="sec_result">结果</h2>
<p>如果参数均有效，算子
<code><span data-if="hdevelop" style="display:inline">bundle_adjust_mosaic</span><span data-if="c" style="display:none">bundle_adjust_mosaic</span><span data-if="cpp" style="display:none">BundleAdjustMosaic</span><span data-if="com" style="display:none">BundleAdjustMosaic</span><span data-if="dotnet" style="display:none">BundleAdjustMosaic</span><span data-if="python" style="display:none">bundle_adjust_mosaic</span></code> 返回值 <TT>2</TT> (
      <TT>H_MSG_TRUE</TT>)
    .  If
necessary an exception is raised.</p>
<h2 id="sec_predecessors">可能的前置算子</h2>
<p>
<code><a href="proj_match_points_ransac.html"><span data-if="hdevelop" style="display:inline">proj_match_points_ransac</span><span data-if="c" style="display:none">proj_match_points_ransac</span><span data-if="cpp" style="display:none">ProjMatchPointsRansac</span><span data-if="com" style="display:none">ProjMatchPointsRansac</span><span data-if="dotnet" style="display:none">ProjMatchPointsRansac</span><span data-if="python" style="display:none">proj_match_points_ransac</span></a></code>, 
<code><a href="proj_match_points_ransac_guided.html"><span data-if="hdevelop" style="display:inline">proj_match_points_ransac_guided</span><span data-if="c" style="display:none">proj_match_points_ransac_guided</span><span data-if="cpp" style="display:none">ProjMatchPointsRansacGuided</span><span data-if="com" style="display:none">ProjMatchPointsRansacGuided</span><span data-if="dotnet" style="display:none">ProjMatchPointsRansacGuided</span><span data-if="python" style="display:none">proj_match_points_ransac_guided</span></a></code>
</p>
<h2 id="sec_successors">可能的后置算子</h2>
<p>
<code><a href="gen_bundle_adjusted_mosaic.html"><span data-if="hdevelop" style="display:inline">gen_bundle_adjusted_mosaic</span><span data-if="c" style="display:none">gen_bundle_adjusted_mosaic</span><span data-if="cpp" style="display:none">GenBundleAdjustedMosaic</span><span data-if="com" style="display:none">GenBundleAdjustedMosaic</span><span data-if="dotnet" style="display:none">GenBundleAdjustedMosaic</span><span data-if="python" style="display:none">gen_bundle_adjusted_mosaic</span></a></code>
</p>
<h2 id="sec_see">参考其它</h2>
<p>
<code><a href="gen_projective_mosaic.html"><span data-if="hdevelop" style="display:inline">gen_projective_mosaic</span><span data-if="c" style="display:none">gen_projective_mosaic</span><span data-if="cpp" style="display:none">GenProjectiveMosaic</span><span data-if="com" style="display:none">GenProjectiveMosaic</span><span data-if="dotnet" style="display:none">GenProjectiveMosaic</span><span data-if="python" style="display:none">gen_projective_mosaic</span></a></code>
</p>
<h2 id="sec_module">模块</h2>
<p>
Matching</p>
<!--OP_REF_FOOTER_START-->
<hr>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<div class="footer">
<div class="copyright">HALCON算子参考手册 Copyright © 2015-2023 51Halcon</div>
</div>
</div>
</body>
</html>
